package leetcode_21_40;

import org.junit.Test;
import utils.ListNode;

public class Test2 {
    @Test
    //合并链表
    public void test21(){
        ListNode listNode1=new ListNode(1);
        ListNode listNode2=new ListNode(2);
        ListNode listNode3=new ListNode(7);
        ListNode listNode4=new ListNode(4);
        ListNode listNode5=new ListNode(5);
        ListNode listNode6=new ListNode(6);
        listNode1.next=listNode2;
        listNode2.next=listNode3;
        listNode4.next=listNode5;
        listNode5.next=listNode6;
        System.out.println(mergeTwoLists_21.mergeTwoLists(listNode1,listNode4));
    }

    @Test
    //括号生成
    public void test22(){
        System.out.println(generateParenthesis_22.generateParenthesis(3));
    }

    @Test
    //合并k个升序链表
    public void test23(){
        ListNode listNode1=new ListNode(2);
        ListNode listNode2=new ListNode(2);
        ListNode listNode3=new ListNode(7);

        ListNode listNode4=null;
        ListNode listNode5=new ListNode(5);
        ListNode listNode6=new ListNode(6);

        ListNode listNode7=new ListNode(-1);
        ListNode listNode8=new ListNode(3);
        ListNode listNode9=new ListNode(10);

        listNode1.next=listNode2;
        listNode2.next=listNode3;

//        listNode4.next=listNode5;
//        listNode5.next=listNode6;

        listNode7.next=listNode8;
        listNode8.next=listNode9;

        ListNode[] listNodes=new ListNode[]{listNode4};
        System.out.println(mergeKLists_23.mergeKLists2(listNodes));
    }

    @Test
    //两两交换链表中的节点
    public void test24(){
        ListNode listNode1=new ListNode(1);
        ListNode listNode2=new ListNode(2);
        ListNode listNode3=new ListNode(3);
        ListNode listNode4=new ListNode(4);


        listNode1.next=listNode2;
        listNode2.next=listNode3;
        listNode3.next=listNode4;


        System.out.println(swapPairs_24.swapPairs(listNode1));
    }

    @Test
    //k 个一组翻转链表
    public void test25(){
        ListNode listNode1=new ListNode(1);
        ListNode listNode2=new ListNode(2);
        ListNode listNode3=new ListNode(3);
        ListNode listNode4=new ListNode(4);
        ListNode listNode5=new ListNode(5);
        listNode1.next=listNode2;
        listNode2.next=listNode3;
        listNode3.next=listNode4;
        listNode4.next=listNode5;
        System.out.println(reverseKGroup_25.reverseKGroup(listNode1,3));

    }

    @Test
    //删除有序数组中的重复项
    public void test26(){
        int[] a=new int[]{1,1,2,3,3,4};
        System.out.println(removeDuplicates_26.removeDuplicates(a));
    }

    @Test
    //删除有序数组中元素
    public void test27(){
        int[] a=new int[]{1,1,2,3,3,4};
        System.out.println(removeDuplicates_26.removeElement(a,1));
    }

    @Test
    //找出字符串中第一个匹配项的下标
    public void test28(){
        String haystack = "mississippi", needle = "issip";
        System.out.println(new strStr_28().strStr2(haystack,needle));
    }

    @Test
    //两数相除
    public void test29(){
        System.out.println(divide_29.divide2(20,3));
    }

    @Test
    //串联所有单词的子串
    public void test30(){
        String[] strs=new String[]{"ba","ab"};
        System.out.println(findSubstring_30.findSubstring2("abaabaaa",strs));
    }

    @Test
    //下一个排列
    public void test31(){
        int[] a=new int[]{3,2,1};
        new nextPermutation_31().nextPermutation2(a);
    }

    @Test
    //下一个排列
    public void test32(){
        System.out.println(longestValidParentheses_32.longestValidParentheses(")()())"));
    }

    @Test
    //搜索旋转排序数组
    public void test33(){
        int[] a=new int[]{5,6,0,1,2,3,4};
        System.out.println(search_33.search(a,0));
    }

    @Test
    //非递减顺序排列的整数数组，给定目标值在数组中的开始位置和结束位置。
    public void test34(){
        int[] a=new int[]{5,7,7,8,8,10};
        System.out.println(searchRange_34.searchRange(a,8));
    }

    @Test
    //搜索插入位置
    public void test35(){
        int[] a=new int[]{1,3,5,6};
        System.out.println(searchInsert_35.searchInsert(a,0));
    }

    @Test
    //有效的数独
    public void test36(){
        char[][] a={
                {'5','3','.','.','7','.','.','.','.'},
                {'6','.','.','1','9','5','.','.','.'},
                {'.','9','8','.','.','.','.','6','.'},
                {'8','.','.','.','6','.','.','.','3'},
                {'4','.','.','8','.','3','.','.','1'},
                {'7','.','.','.','2','.','.','.','6'},
                {'.','6','.','.','.','.','2','8','.'},
                {'.','.','.','4','1','9','.','.','5'},
                {'.','.','.','.','8','.','.','7','9'}
        };
        char[][] b={
                {'.','.','.','.','.','.','5','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'9','3','.','.','2','.','4','.','.'},
                {'.','.','7','.','.','.','3','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'.','.','.','3','4','.','.','.','.'},
                {'.','.','.','.','.','3','.','.','.'},
                {'.','.','.','.','.','5','2','.','.'}
        };
        char[][] c={
                {'.','.','.','.','.','.','5','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'9','3','.','.','.','7','4','.','.'},
                {'.','.','.','7','.','.','3','.','.'},
                {'.','.','.','.','7','.','.','.','.'},
                {'.','.','.','3','.','.','.','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'.','.','.','.','.','.','2','.','.'}
        };
        System.out.println(isValidSudoku_36.isValidSudoku(c));
    }

    @Test
    //有效的数独
    public void test37(){
        char[][] a={
                {'5','3','.','.','7','.','.','.','.'},
                {'6','.','.','1','9','5','.','.','.'},
                {'.','9','8','.','.','.','.','6','.'},
                {'8','.','.','.','6','.','.','.','3'},
                {'4','.','.','8','.','3','.','.','1'},
                {'7','.','.','.','2','.','.','.','6'},
                {'.','6','.','.','.','.','2','8','.'},
                {'.','.','.','4','1','9','.','.','5'},
                {'.','.','.','.','8','.','.','7','9'}
        };
        char[][] b={
                {'.','.','.','.','.','.','5','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'9','3','.','.','2','.','4','.','.'},
                {'.','.','7','.','.','.','3','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'.','.','.','3','4','.','.','.','.'},
                {'.','.','.','.','.','3','.','.','.'},
                {'.','.','.','.','.','5','2','.','.'}
        };
        char[][] c={
                {'.','.','.','.','.','.','5','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'9','3','.','.','.','7','4','.','.'},
                {'.','.','.','7','.','.','3','.','.'},
                {'.','.','.','.','7','.','.','.','.'},
                {'.','.','.','3','.','.','.','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'.','.','.','.','.','.','2','.','.'}
        };
        new solveSudoku_37().solveSudoku(a);
    }

    @Test
    //外观数列
    public void test38(){
        System.out.println(countAndSay_38.countAndSay(6));
    }

    @Test
    //组合总和
    public void test39(){
        int[] a={1,2,3,4,5,6};
        System.out.println(new combinationSum_39().combinationSum2(a,6));
    }

    @Test
    //组合总和2
    public void test40(){
        int[] a={10,1,2,7,6,1,5};
        System.out.println(new combinationSum2_40().combinationSum2(a,8));
    }
}
